# 编译器
CC = g++

# 编译标志
CXXFLAGS = -std=c++11 -Wall -Wextra -O2 -MMD 

# 链接标志
LDFLAGS = -lstdc++ 

# 源文件
SOURCES = $(wildcard *.cpp)

# 对象文件
OBJECTS = $(SOURCES:%.cpp=$(OBJ_DIR)/%.o)

# 依赖文件
DEPS = $(OBJECTS:.o=.d)

# 目标可执行文件
TARGET = main

# 默认目标
all: $(TARGET)

# 链接目标
$(TARGET): $(OBJECTS)
	$(CC) $(LDFLAGS) $^ -o $@

# 编译规则
$(OBJ_DIR)/%.o: %.cpp | $(OBJ_DIR)
	$(CC) $(CXXFLAGS) -c $< -o $@

# 创建对象文件目录
$(OBJ_DIR):
	@mkdir -p $(OBJ_DIR)

# 包含依赖文件
-include $(DEPS)

# 清理
clean:
	@rm -rf $(OBJ_DIR) $(TARGET) $(DEPS)

# 显示对象文件
echo:
	@echo $(OBJECTS)